home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xalan.jar / org / apache / xalan / xslt / CountersTable.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-04-12  |  2.5 KB  |  80 lines

  1. package org.apache.xalan.xslt;
  2.  
  3. import java.util.Hashtable;
  4. import java.util.Vector;
  5. import org.apache.xalan.xpath.MutableNodeListImpl;
  6. import org.apache.xalan.xpath.XPathSupport;
  7. import org.w3c.dom.Node;
  8. import org.xml.sax.SAXException;
  9.  
  10. class CountersTable extends Hashtable {
  11.    private MutableNodeListImpl m_newFound = new MutableNodeListImpl();
  12.    int m_countersMade;
  13.  
  14.    Vector getCounters(ElemNumber var1) {
  15.       Vector var2 = (Vector)((Hashtable)this).get(var1);
  16.       return var2 == null ? this.putElemNumber(var1) : var2;
  17.    }
  18.  
  19.    Vector putElemNumber(ElemNumber var1) {
  20.       Vector var2 = new Vector();
  21.       ((Hashtable)this).put(var1, var2);
  22.       return var2;
  23.    }
  24.  
  25.    void appendBtoFList(MutableNodeListImpl var1, MutableNodeListImpl var2) {
  26.       int var3 = var2.getLength();
  27.  
  28.       for(int var4 = var3 - 1; var4 >= 0; --var4) {
  29.          var1.addNode(var2.item(var4));
  30.       }
  31.  
  32.    }
  33.  
  34.    int countNode(XPathSupport var1, ElemNumber var2, Node var3) throws SAXException {
  35.       int var4 = 0;
  36.       Vector var5 = this.getCounters(var2);
  37.       int var6 = var5.size();
  38.       var2.getCountMatchPattern(var1, var3);
  39.       Node var7 = var2.getTargetNode(var1, var3);
  40.       if (var7 != null) {
  41.          for(int var8 = 0; var8 < var6; ++var8) {
  42.             Counter var9 = (Counter)var5.elementAt(var8);
  43.             var4 = var9.getPreviouslyCounted(var1, var7);
  44.             if (var4 > 0) {
  45.                return var4;
  46.             }
  47.          }
  48.  
  49.          for(var4 = 0; var7 != null; var7 = var2.getPreviousNode(var1, var7)) {
  50.             if (var4 != 0) {
  51.                for(int var14 = 0; var14 < var6; ++var14) {
  52.                   Counter var10 = (Counter)var5.elementAt(var14);
  53.                   int var11 = var10.m_countNodes.getLength();
  54.                   if (var11 > 0 && var10.m_countNodes.item(var11 - 1).equals(var7)) {
  55.                      var4 += var11 + var10.m_countNodesStartCount;
  56.                      if (var11 > 0) {
  57.                         this.appendBtoFList(var10.m_countNodes, this.m_newFound);
  58.                      }
  59.  
  60.                      this.m_newFound.removeAllElements();
  61.                      return var4;
  62.                   }
  63.                }
  64.             }
  65.  
  66.             this.m_newFound.addNode(var7);
  67.             ++var4;
  68.          }
  69.  
  70.          Counter var15 = new Counter(var2);
  71.          ++this.m_countersMade;
  72.          this.appendBtoFList(var15.m_countNodes, this.m_newFound);
  73.          this.m_newFound.removeAllElements();
  74.          var5.addElement(var15);
  75.       }
  76.  
  77.       return var4;
  78.    }
  79. }
  80.